package bongo.framework.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import bongo.framework.gameobject.component.AbstractComponent;
import bongo.framework.gameobject.component.Component;
/**
 * 
 * <p>Used to specify inter-component dependencies.
 * Avoid circular dependencies if possible</p>
 * <p>As a parameter it accepts a Component Type or and Array of Component Type(in case of multiple dependencies)</p>
 * <pre>
 * Example Usage:
 * {@code}
 * {@literal}@RequiresComponent({SomeOtherComponent.class,ComponentB.class})
 * public class SomeComponent extends AbstractComponent{
 * ...
 * }
 * </pre>
 * @author boogie
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface RequiresComponent {
	Class<? extends Component>[] value();
}
